package com.cc.pdf;

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


import com.lowagie.text.BadElementException;
//https://blog.csdn.net/echohuangshihuxue/article/details/80874429

/**
 * PdfPTable:关于这个类的方法用的不多，主要是
 *
 *      addCell()，  添加单元格
 *      setWidthPercentage(),表格的占比，一般不用改
 *
 *  PdfpCell重点是这个类。
 *          setBorder()(四边的厚度), 设置边框
 *          setBorderWidthLeft(),
 *          setBorderWidthRight...（上下左右的边框厚度，可以设置为0）
 *
 *          setColspan(),   合并行
 *          setRowspan().   合并列
 *              这两个方法也是很灵活，对应每列的长度控制起了很关键的作用。如果你想让这列很宽，可以设置该列合并更多的列即可。
 *              每列的高度，我一般不是采用setRowspan来解决。可以在每列内容后面添加+"\n"即换行就可以添加高度了。
 *
 *          setHorizontalAlignment()设置单元格内容的位置，前后左右等
 *          setPadding(10);  设置单元格内边距
 */
public class Test4 {
    public static void main(String[] args) throws Exception {
        // Table
        // 创建Document对象(页面的大小为A4,左、右、上、下的页边距为10)
        Document document = new Document(PageSize.A4, 10, 10, 10, 10);
        // 建立书写器
        PdfWriter.getInstance(document, new FileOutputStream("Test4.PDF"));
        // 设置相关的参数
        Test4.setParameters(document, "开发者测试", "测试", "测试 开发者 调试", "甘雨路", "甘雨路");
        // 打开文档
        document.open();
        // 使用iTextAsian.jar中的字体
        BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
        Font font = new Font(baseFont);

        List<User> users = new ArrayList<User>();
        // 循环添加对象
        for (int i = 0; i < 5; i++) {
            User user = new User();
            user.setId("" + i);
            user.setInfo("开发者测试" + i);
            user.setName("测试" + i);
            users.add(user);
        }
        PdfPTable table = Test4.setTable(users);
        Paragraph paragraph = new Paragraph("用户信息如下：", Test4.setFont());
        paragraph.setAlignment(Element.ALIGN_LEFT);
        paragraph.setSpacingAfter(20);//之后行的空格
        document.add(paragraph);
        document.add(table);
        // 关闭文档
        document.close();
    }

    public static PdfPTable setTable(List<User> users) throws BadElementException {
        // 创建一个有3列的表格
        PdfPTable table = new PdfPTable(3);
//        table.setBorderWidth(1);
//        table.setBorderColor(new Color(0, 0, 255));
//        table.setPadding(5);
        // table.setSpacing(5);
        // 创建表头
        PdfPCell cell1 = Test4.setTableHeader("编号ID");
        PdfPCell cell2 = Test4.setTableHeader("基本信息");
        PdfPCell cell3 = Test4.setTableHeader("姓名");
        table.addCell(cell1);
        table.addCell(cell2);
        table.addCell(cell3);
        // 添加此代码后每页都会显示表头
//        table.endHeaders();
        for (int i = 0; i < users.size(); i++) {
            PdfPCell celli1 = Test4.setTableHeader(users.get(i).getId());
            PdfPCell celli2 = Test4.setTableHeader(users.get(i).getInfo());
            PdfPCell celli3 = Test4.setTableHeader(users.get(i).getName());
            table.addCell(celli1);
            table.addCell(celli2);
            table.addCell(celli3);
        }
        return table;
    }

    /**
     * 设置字体编码格式
     * 
     * @return
     */
    public static Font setFont() {
        BaseFont baseFont = null;
        try {
            baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Font font = new Font(baseFont, 8, Font.NORMAL, BaseColor.BLACK);
        return font;
    }

    /**
     * 设置cell
     * 
     * @param name
     * @return
     * @throws BadElementException
     */
    public static PdfPCell setTableHeader(String name) throws  com.lowagie.text.BadElementException {

        PdfPCell cell = new PdfPCell(new Phrase(name, Test4.setFont()));
        // 单元格水平对齐方式
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        // 单元格垂直对齐方式
        cell.setVerticalAlignment(Element.ALIGN_CENTER);
//        cell.setHeader(true);
        cell.setBackgroundColor(BaseColor.PINK);
        return cell;
    }

    /**
     * 设置相关参数
     * 
     * @param document
     * @return
     */
    public static Document setParameters(Document document, String title, String subject, String keywords,
            String author, String creator) {
        // 设置标题
        document.addTitle(title);
        // 设置主题
        document.addSubject(subject);
        // 设置作者
        document.addKeywords(keywords);
        // 设置作者
        document.addAuthor(author);
        // 设置创建者
        document.addCreator(creator);
        // 设置生产者
        document.addProducer();
        // 设置创建日期
        document.addCreationDate();

        return document;
    }
}
